#include <unordered_set>
#include <string>
#include "../resources/Sales_data.h"

using namespace std;

size_t hasher(const Sales_data &);
bool eqOp(const Sales_data &, const Sales_data &);

using SD_multiset = unordered_multiset<Sales_data, 
                    decltype(hasher) *, decltype(eqOp) *>;

int main()
{
    // 参数是桶大小、哈希函数指针和相等性判断运算符指针
    SD_multiset bookStore(42, hasher, eqOp);

    // 如果类定义了 == 运算符，则可以只重载哈希计算函数
    unordered_set<Sales_data, decltype(hasher)*> dataSet(10, hasher);
}

// 重载哈希计算函数
size_t hasher(const Sales_data &sd)
{
    return hash<string>()(sd.isbn());
}

// 重载 == 运算符
bool eqOp(const Sales_data &lhs, const Sales_data &rhs)
{
    return lhs.isbn() == rhs.isbn();
}